<?php

namespace console\controllers;

use Yii;
use common\components\Myhelpers;
use common\models\Systemconfig;


/**
 * 自动发布系统 exemple
 * 
 * yii deploy
 */ 
class DeployController extends CController
{


	public $enableCsrfValidation = false;  //必须加上此选项

	public $name_file = '/var/www/iam';

    public function actionIndex()
    {
    	$db = Yii::$app->db;
    	if (!file_exists($this->name_file)) {
    		echo 'no such iam file';
    		return 0;
    	}

        //需要将这个配制放在后台文件里面
        $file_name = dirname(__DIR__).'/config/iam';
        // echo $file_name."\n";
    	$iam = file_get_contents($file_name);
    	$name_arr = array('ydl_test','ydl_web1','ydl_web2');

    	//因为原文件存在换行等问题，建议文字匹配
    	if (preg_match('#ydl_test#', $iam)) {
    		$iam = 'ydl_test';
    	} elseif (preg_match('#ydl_web1#', $iam)) {
    		$iam = 'ydl_web1';
    	} elseif (preg_match('#ydl_web2#', $iam)) {
    		$iam = 'ydl_web2';
    	} else {
    		echo 'no such match name'."\n";
    		return 0;
    	}

        $depoy = array(
            //测试服务器
            'ydl_test' => array(

                array(
                    'name' => 'tianpin_code',
                    'branch' => 'dev',
                    'server_value' => 'ydl_test_value',
                    'command' => 'cd /var/www/tianpin_code && git pull origin dev',
                ),
                // array(
                //     'name' => 'ydl',
                //     'branch' => 'dev',
                //     'server_value' => 'ydl_test_value',
                //     'command' => 'cd /var/www/ydl && git pull origin dev',
                // ),
            ),

            //正式服务器1
            'ydl_web1' => array(
                array(
                    'name' => 'tianpin_code',
                    'branch' => 'master',
                    'server_value' => 'ydl_web1_value',
                    'command' => 'cd /var/www/tianpin_code && git pull origin master',
                ),
                // array(
                //     'name' => 'ydl',
                //     'branch' => 'master',
                //     'server_value' => 'ydl_web1_value',
                //     'command' => 'cd /var/www/ydl && git pull origin master',
                // ),
            ),
            //正式服务器2
            // 'ydl_web2' => array(
            //     array(
            //         'name' => 'yidianling',
            //         'branch' => 'master',
            //         'server_value' => 'ydl_web2_value',
            //         'command' => 'cd /var/www/yidianling && git pull origin master',
            //     ),
            //     array(
            //         'name' => 'ydl',
            //         'branch' => 'master',
            //         'server_value' => 'ydl_web2_value',
            //         'command' => 'cd /var/www/ydl && git pull origin master',
            //     ),                

            // ),
            

        );


        $t1 = microtime(true); //运行时间
        //将发布周期缩短为20秒内
        do {

            foreach ($depoy[$iam] as $key => $d) {
                $name = $d['name'];
                $branch = $d['branch'];
                $server_value = $d['server_value'];
                $command = $d['command'];

                $sql = "SELECT * FROM `deploy`  WHERE `name`='$name' AND `branch`='$branch'";
                $result = $db->createCommand($sql)->queryOne();
                //查找目前系统值不相等的进行更新
                if ($result['gitcafe_value'] != $result[$server_value]) {
                    echo "-----------------------------\n";
                    echo exec("$command");    


                    $this->updateSeverValue($result['id'], $server_value, $result['gitcafe_value']);
                    echo "\n ".$name." ".$branch." ".date('m-d H:i:s')."\n";
                    

                }

            }

            //判断执行时间，超过40就停止运行
            sleep(5);
            $t2 = microtime(true);
            $t = round($t2 - $t1, 3); //消耗多少秒
            echo $t."\n";
            
        } while($t <= 40);


		return 0;       
    }

    //更新值 
    public function updateSeverValue($id, $key, $value){
        $db = Yii::$app->db;
        $sql = "UPDATE deploy set `$key`='$value' WHERE id=".$id;
        $db->createCommand($sql)->execute();         
    }

}